home *** CD-ROM | disk | FTP | other *** search
/ Aminet 6 / Aminet 6 - June 1995.iso / Aminet / gfx / 3d / irit50src.lha / irit5 / scripts / prismovi.irt < prev    next >
Encoding:
Text File  |  1994-10-26  |  8.1 KB  |  231 lines

  1. #
  2. # Some tests for the PRISA (planar layout) code.
  3. #
  4.  
  5. save_res = resolution;
  6. save_mat = view_mat;
  7. SampPerCrv = 64;
  8. viewobj(view_mat);
  9.  
  10. ViewState("LessIso");
  11. ViewState("LessIso");
  12.  
  13. srfFrameCrvs = function( Srf, Width ):UMin:UMax:VMin:VMax:
  14.     UMin = nth( pdomain( Srf ), 1 ):
  15.     UMax = nth( pdomain( Srf ), 2 ):
  16.     VMin = nth( pdomain( Srf ), 3 ):
  17.     VMax = nth( pdomain( Srf ), 4 ):
  18.     return = list( SwpCircSrf( csurface( Srf, col, UMin ), Width, 0 ),
  19.            SwpCircSrf( csurface( Srf, col, ( UMin + UMax ) / 2.0 ), Width, 0 ),
  20.            SwpCircSrf( csurface( Srf, col, UMax ), Width, 0 ),
  21.            SwpCircSrf( csurface( Srf, row, VMin ), Width, 0 ),
  22.            SwpCircSrf( csurface( Srf, row, ( VMin + VMax ) / 2.0 ), Width, 0 ),
  23.            SwpCircSrf( csurface( Srf, row, VMax ), Width, 0 ) );
  24.  
  25. SrfListFrameCrvs = function( SrfList, Width ):Srf:
  26.     return = nil():
  27.     for ( i = 1, 1, sizeof( SrfList ),
  28.     return = return + srfFrameCrvs( nth( SrfList, i ), Width ) );
  29.  
  30. #############################################################################
  31. #
  32. # Layout (prisa) of a wine glass.
  33. #
  34. view_mat3d = rotx(-90) * roty(130) * rotx(-35) *
  35.         scale(vector(0.5, 0.5, 0.5)) * trans(vector(0.0, -0.5, 0.0));
  36. view_mat2d = scale( vector( 0.1,  0.1, 0.1 ) ) *
  37.          trans( vector( 0.0, -0.8, 0.0 ) );
  38.  
  39. cross = cbspline( 3,
  40.           list( ctlpt( E3, 0.7, 0.0, 0. ),
  41.             ctlpt( E3, 0.7, 0.0, 0.06 ),
  42.             ctlpt( E3, 0.1, 0.0, 0.1 ),
  43.             ctlpt( E3, 0.1, 0.0, 0.6 ),
  44.             ctlpt( E3, 0.6, 0.0, 0.6 ),
  45.             ctlpt( E3, 0.8, 0.0, 0.8 ),
  46.             ctlpt( E3, 0.8, 0.0, 1.4 ),
  47.             ctlpt( E3, 0.6, 0.0, 1.6 ) ),
  48.           list( KV_OPEN ) );
  49. wglass = surfprev( cross * scale( vector( 1.6, 1.6, 1.6 ) ) );
  50. color( wglass, yellow );
  51.  
  52. wgl_prisa3d = prisa( wglass, SampPerCrv, -0.1, COL, vector( 0, 0.25, 0.0 ) );
  53. color( wgl_prisa3d, magenta );
  54.  
  55. wgl_prisa2d = prisa( wglass, SampPerCrv, 0.1, COL, vector( 0, 0, 0 ) ) *
  56.         scale( vector( 0.8, 0.8, 0.8 ) ) *
  57.         trans( vector( 0, -5, 5.5 ) );
  58. color( wgl_prisa2d, red );
  59.  
  60. built_gl = nil();
  61. iter_gl = nil();
  62. morph_step = 0.02;
  63.  
  64. wgl_prisa2d_frame = srfListFrameCrvs( wgl_prisa2d, 0.02 );
  65. color( wgl_prisa2d_frame, red );
  66. wgl_prisa3d_frame = srfListFrameCrvs( wgl_prisa3d, 0.02 );
  67. color( wgl_prisa3d_frame, green );
  68.  
  69. view( list( wgl_prisa2d_frame, wgl_prisa3d_frame ), on );
  70. save( "wglass.dat", list( wgl_prisa2d_frame, wgl_prisa3d_frame ) );
  71. for ( i = 1, 1, sizeof( wgl_prisa3d ),
  72.     min_gl = nth( wgl_prisa2d, 1 + sizeof( wgl_prisa3d ) - i ):
  73.     max_gl = nth( wgl_prisa3d, i ):
  74.     ffcompat( min_gl, max_gl ):
  75.     for ( t = 0.0, morph_step, 1.0,
  76.     iter_gl = smorph( min_gl, max_gl, t ):
  77.     color( iter_gl, cyan ):
  78.     viewobj( iter_gl ):
  79.     save( "wglass" + i + "." + t / morph_step + ".dat",
  80.           iter_gl ) ):
  81.     snoc( max_gl, built_gl ):
  82.     color( built_gl, yellow ):
  83.     view( list( wgl_prisa2d_frame, wgl_prisa3d_frame, built_gl ), on ):
  84.     save( "wglass" + i + ".dat", built_gl ) );
  85. viewclear();
  86. ViewState("MoreIso");
  87. ViewState("MoreIso");
  88.  
  89. #############################################################################
  90. #
  91. # Layout (prisa) Fuselage of b58 model.
  92. #
  93. c1 = circle( vector( 0.0, 0.0, 0.0 ), 0.01 ) *
  94.      roty( 90 ) *
  95.      trans( vector( -1.0, 0.0, 0.1 ) );
  96. c2 = circle( vector( 0.0, 0.0, 0.0 ), 0.025 ) *
  97.      roty( 90 ) *
  98.      trans( vector( 0.0, 0.0, 0.1 ) );
  99. c3 = circle( vector( 0.0, 0.0, 0.0 ), 0.03 ) *
  100.      roty( 90 ) *
  101.      trans( vector( 0.1, 0.0, 0.1 ) );
  102. c4 = cbspline( 3,
  103.            list( ctlpt( P3, 1,     2.5,   0.0,   -0.1 ),
  104.              ctlpt( P3, 0.707, 1.77,  0.283, -0.071 ),
  105.              ctlpt( P3, 1,     2.5,   0.4,    0.0 ),
  106.              ctlpt( P3, 0.707, 1.77,  0.283,  0.283 ),
  107.              ctlpt( P3, 1,     2.5,   0.0,    0.4 ),
  108.              ctlpt( P3, 0.707, 1.77, -0.283,  0.283 ),
  109.              ctlpt( P3, 1,     2.5,  -0.4,    0.0 ),
  110.              ctlpt( P3, 0.707, 1.77, -0.283, -0.071 ),
  111.              ctlpt( P3, 1,     2.5,   0.0,   -0.1 ) ),
  112.            list( 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 4 ) ) *
  113.      trans( vector( -1.5, 0.0, 0.0 ) );
  114. c5 = cbspline( 3,
  115.            list( ctlpt( P3, 1,     2.5,   0.0,   -0.1 ),
  116.              ctlpt( P3, 0.707, 1.77,  0.283, -0.071 ),
  117.              ctlpt( P3, 1,     2.5,   0.4,    0.0 ),
  118.              ctlpt( P3, 0.707, 1.77,  0.283,  0.6 ),
  119.              ctlpt( P3, 1,     2.5,   0.0,    0.5 ),
  120.              ctlpt( P3, 0.707, 1.77, -0.283,  0.6 ),
  121.              ctlpt( P3, 1,     2.5,  -0.4,    0.0 ),
  122.              ctlpt( P3, 0.707, 1.77, -0.283, -0.071 ),
  123.              ctlpt( P3, 1,     2.5,   0.0,   -0.1 ) ),
  124.            list( 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 4 ) ) *
  125.      trans( vector( 0.0, 0.0, 0.0 ) );
  126.  
  127. fuseFront = sFromCrvs( list( c1, c2, c3, c4, c5 ), 3 );
  128. color( fuseFront, yellow );
  129.  
  130. c1 = cbspline( 3,
  131.            list( ctlpt( P3, 1,     2.5,   0.0,   -0.1 ),
  132.              ctlpt( P3, 0.707, 1.77,  0.283, -0.071 ),
  133.              ctlpt( P3, 1,     2.5,   0.4,    0.0 ),
  134.              ctlpt( P3, 0.707, 1.77,  0.283,  0.566 ),
  135.              ctlpt( P3, 1,     2.5,   0.0,    0.8 ),
  136.              ctlpt( P3, 0.707, 1.77, -0.283,  0.566 ),
  137.              ctlpt( P3, 1,     2.5,  -0.4,    0.0 ),
  138.              ctlpt( P3, 0.707, 1.77, -0.283, -0.071 ),
  139.              ctlpt( P3, 1,     2.5,   0.0,   -0.1 ) ),
  140.            list( 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 4 ) ) *
  141.      trans( vector( 0.0, 0.0, 0.0 ) );
  142. c2 = c1 * scale( vector( 1.05, 1.05, 1.05 ) ) *
  143.           trans( vector( 0.3, 0.0, 0.0 ) );
  144. c3 = c1 * scale( vector( 0.95, 0.95, 0.95 ) ) *
  145.       trans( vector( 1.7, 0.0, -0.02 ) );
  146. c4 = circle( vector( 0.0, 0.0, 0.0 ), 0.35 ) *
  147.      roty( 90 ) *
  148.      trans( vector( 5.0, 0.0, 0.2 ) );
  149. c5 = c4 * trans( vector( 0.2, 0.0, 0.0 ) );
  150. c6 = circle( vector( 0.0, 0.0, 0.0 ), 0.3 ) *
  151.      roty( 90 ) *
  152.      trans( vector( 10.5, 0.0, 0.2 ) );
  153. c7 = circle( vector( 0.0, 0.0, 0.0 ), 0.01 ) *
  154.      roty( 90 ) *
  155.      trans( vector( 11.0, 0.0, 0.25 ) );
  156.  
  157. fuseBack = sFromCrvs( list( c1, c2, c3, c4, c5, c6, c7 ), 3 );
  158. color( fuseBack, yellow );
  159.  
  160. view_mat3d = rotx(-90) * roty(130) * rotx(-35) *
  161.         scale(vector(0.2, 0.2, 0.2)) * trans(vector(0.7, 0.2, 0.0));
  162. view_mat2d = scale( vector( 0.1,  0.1, 0.1 ) ) *
  163.          trans( vector( 0.0, -0.8, 0.0 ) );
  164. interact( list( view_mat3d, fuseBack, fuseFront ) );
  165.  
  166. front_prisa = prisa( fuseFront, SampPerCrv, -0.05, COL, vector( -2.0, 0.2, 0.0 ) );
  167. back_prisa = prisa( fuseBack, SampPerCrv, -0.05, COL, vector( 2.0, 0.2, 0.0 ) );
  168. color(front_prisa, yellow);
  169. color(back_prisa, yellow);
  170. interact( list( view_mat3d, front_prisa, back_prisa ) );
  171.  
  172. front_prisa = prisa( fuseFront, SampPerCrv, 0.05, COL, vector( -2.0, 0.2, 0.0 ) );
  173. back_prisa = prisa( fuseBack, SampPerCrv, 0.05, COL, vector( 2.0, 0.2, 0.0 ) );
  174.  
  175. view_mat2d = scale( vector( 0.15,  0.15, 0.15 ) ) *
  176.          trans( vector( 0.0, -0.8, 0.0 ) );
  177. interact( list( view_mat2d, front_prisa, back_prisa ) );
  178.  
  179. # Animate:
  180.  
  181. b58_prisa2d = 
  182.     prisa( fuseBack, SampPerCrv, 0.05, COL, vector( 0, 0.1, 0 ) ) *
  183.     trans( vector( 0, 4.4, 0 ) ) +
  184.     prisa( fuseFront, SampPerCrv, 0.05, COL, vector( 0, 0.1, 0 ) );
  185. color( b58_prisa2d, red );
  186.  
  187. b58_prisa3d = ( prisa( fuseFront, SampPerCrv, -0.05, COL, vector( 0, 0, 0 ) ) +
  188.             prisa( fuseBack, SampPerCrv, -0.05, COL, vector( 0, 0, 0 ) ) )
  189.           * rotz( 90 ) * trans( vector( 0, 1, 3 ) );
  190. color( b58_prisa3d, magenta );
  191.  
  192. view_mat = rotx(-90) * roty(130) * rotx(-35) *
  193.         scale(vector(0.18, 0.18, 0.18)) *
  194.                 trans(vector(0.9, -0.9, 0.0));
  195.  
  196. built_b58 = nil();
  197. iter_b58 = nil();
  198. morph_step = 0.02;
  199.  
  200. b58_prisa2d_frame = srfListFrameCrvs( b58_prisa2d, 0.03 );
  201. color( b58_prisa2d_frame, red );
  202. b58_prisa3d_frame = srfListFrameCrvs( b58_prisa3d, 0.03 );
  203. color( b58_prisa3d_frame, green );
  204.  
  205. view( list( view_mat, b58_prisa2d_frame, b58_prisa3d_frame ), on );
  206. save( "b58body.dat", list( b58_prisa2d_frame, b58_prisa3d_frame ) );
  207. for ( i = 1, 1, sizeof( b58_prisa3d ),
  208.     min_b58 = nth( b58_prisa2d, 1 + sizeof( b58_prisa3d ) - i ):
  209.     max_b58 = nth( b58_prisa3d, i ):
  210.     ffcompat( min_b58, max_b58 ):
  211.     for ( t = 0.0, morph_step, 1.0,
  212.     iter_b58 = smorph( min_b58, max_b58, t ):
  213.     color( iter_b58, cyan ):
  214.     viewobj( iter_b58 ):
  215.     save( "b58body" + i + "." + t / morph_step + ".dat",
  216.           iter_b58 ) ):
  217.     snoc( max_b58, built_b58 ):
  218.     color( built_b58, yellow ):
  219.     view( list( b58_prisa2d, b58_prisa3d, built_b58 ), on ):
  220.     save( "b58body" + i + ".dat", built_b58 ) );
  221.  
  222. viewclear();
  223. ViewState("MoreIso");
  224. ViewState("MoreIso");
  225.  
  226. #############################################################################
  227. ViewState("MoreIso");
  228. ViewState("MoreIso");
  229. view_mat = save_mat;
  230. resolution = save_res;
  231.